﻿/// <reference path="ext-all-debug.js" />


///
/// De esta clase se heredara para que obtengamos las funcionalidades basicas de un Formulario.
///
/// Propiedades
/// Title: El titulo del panel en el que se crearan la grilla y demas controles.
/// Items: El panel que se va a mostrar en esta pantalla.
/// Proxy: El proxy que se va a utilizar en cualquier funcion que se realize dentro de esta clase llamando al handler.
/// Buttons: Los botons que va a tener la pantalla.
///
/// GetNum: Es una funcion que obtiene como parametro el nombre del talonario en el cual vamos a crear un registro y nos devuelve el numero de ese talonario.
///

Ext.define('FormBase', {
    extend: 'Ext.panel.Panel',
    Title: 'Untitled',
    Items: [],
    Proxy: '',
    Buttons: [],
    BaseLayout: 'fit',
    Icon: null,
    init: function () {
        activeInstance.permisos = this.ObtenerPermisos();
        return {
            title: this.Title,
            margin: '15 15 15 15',
            layout: this.BaseLayout,
            isNew: true,
            frame: false,
            tbar: this.Buttons,
            items: this.Items,
            closable: true,
            closeAction: 'destroy',
            iconCls: this.Icon
        };
    },
    GetNum: function (talonario) {
        var url = this.ObtenerProxy();
        url += "?action=GetNum";
        var response = Ext.Ajax.request({
            async: false,
            url: url,
            params: {
                talonario: talonario
            }
        });
        var result = Ext.JSON.decode(response.responseText);
        if (result.success) {
            return result.value;
        }
        return 0;
    },
    ObtenerPermisos: function () {
        var url = this.ObtenerProxy();
        url += "?action=ObtenerPermisos";
        var response = Ext.Ajax.request({
            async: false,
            url: url
        });
        var result = Ext.JSON.decode(response.responseText);
        if (result.success) {
            return result.permisos;
        }
        return {};
    },
    ObtenerGrupoOperador: function () {
        var url = this.ObtenerProxy();
        url += "?action=ObtenerGrupoOperador";
        var response = Ext.Ajax.request({
            async: false,
            url: url
        });
        var result = Ext.JSON.decode(response.responseText);
        if (result.success) {
            return result.grupoOperador;
        }
        return {};
    },
    EjecutarEnServidor: function (NombreFuncion, Parameters) {
        var url = this.ObtenerProxy();
        url += "?action=" + NombreFuncion;
        var response = Ext.Ajax.request({
            async: false,
            url: url,
            params: Parameters
        });
        return response.responseText;
    },
    ObtenerProxy: function () {
        var url = '';
        if (!Ext.isEmpty(this.Model)) {
            url = Ext.ModelManager.getModel(this.Model).proxy.api.read;
            url = url.substring(0, url.lastIndexOf('?'));
        }
        if (!Ext.isEmpty(this.Proxy)) {
            url = this.Proxy;
        }
        return url;
    },
    DescargarExcel: function (data, fileName) {
        try {
            var body = Ext.getBody();
            var frame = body.createChild({
                tag: 'iframe',
                cls: 'x-hidden',
                name: 'iframe'
            });

            var form = body.createChild({
                tag: 'form',
                cls: 'x-hidden',
                method: 'post',
                action: this.ObtenerProxy() + "?action=Exportar",
                target: 'iframe',
                enctype: 'application/x-www-form-urlencoded',
                encoding: 'application/x-www-form-urlencoded'
            });

            var hiddenItem1 = document.createElement('input');
            Ext.fly(hiddenItem1).set({
                type: 'hidden',
                value: data,
                name: 'dataExportar'
            });
            form.appendChild(hiddenItem1);

            hiddenItem1 = document.createElement('input');
            Ext.fly(hiddenItem1).set({
                type: 'hidden',
                value: this.Title,
                name: 'fileName'
            });
            form.appendChild(hiddenItem1);
            form.dom.submit();
        } catch (e) {

        }

    }
});